/*
 * Copyright (c) 2024. hallele, Inc All rights reserved.
 */

package cn.hallele.mc.sdk.usercenter.api;

import cn.hallele.infrastructure.metadata.io.Page;
import cn.hallele.infrastructure.metadata.io.Response;
import cn.hallele.mc.sdk.usercenter.common.enums.DeptStatusEnum;
import cn.hallele.mc.sdk.usercenter.dto.DeptDTO;
import cn.hallele.mc.sdk.usercenter.dto.DeptQueryDTO;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.hibernate.validator.constraints.Range;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;

/**
 * hallele_mc_sdk
 *
 * @author anle5
 * @since 2024/11/16 16:36
 */
@Tag(name = "部门管理")
public interface DeptApi {
    /**
     * 分页查询部门信息
     *
     * @param condition 查询条件
     * @return 部门信息
     */
    @GetMapping("deptList")
    Response<Page<DeptDTO>> findDeptList(@Valid @ParameterObject @SpringQueryMap DeptQueryDTO condition);

    /**
     * 查询单个部门信息
     *
     * @param condition 查询条件
     * @return 部门信息
     */
    @GetMapping("dept")
    Response<DeptDTO> findDept(@Valid @ParameterObject @SpringQueryMap DeptQueryDTO condition);

    /**
     * 新增 部门
     *
     * @param deptDTO 部门
     * @return 部门信息
     */
    @PostMapping("dept")
    Response<Void> addDept(@Valid @RequestBody DeptDTO deptDTO);

    /**
     * 更新 部门
     *
     * @param deptDTO 部门
     * @return 部门信息
     */
    @PutMapping("dept")
    Response<Void> updateDept(@Valid @RequestBody DeptDTO deptDTO);

    /**
     * 删除 部门
     *
     * @param id 要删除的dept id
     * @return 部门信息
     */
    @DeleteMapping("dept/{id}")
    Response<Void> deleteDept(@Range(min = 1000, max = 9999) @PathVariable("id") Integer id);

    /**
     * 更新 部门 状态
     *
     * @param id         主键
     * @param deptStatus 状态
     * @return 部门信息
     */
    @PutMapping("status/{id}/{status}")
    Response<Void> updateDeptStatus(@PathVariable("id") Integer id, @PathVariable("status") DeptStatusEnum deptStatus);
}
